//
//  CZOauthViewController.swift
//  iOSWeibo10
//
//  Created by ge on 16/5/12.
//  Copyright © 2016年 ge. All rights reserved.
//

import UIKit
import SVProgressHUD

class CZOauthViewController: UIViewController {

    override func loadView() {
        view = webView
        webView.delegate = self
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()

        self.view.backgroundColor = GlobalBKGColor
        
        // 设置导航栏
        // 左边
        navigationItem.leftBarButtonItem = UIBarButtonItem(title: "填充", style: UIBarButtonItemStyle.Plain, target: self, action: "autoFill")
        
        //右边
        navigationItem.rightBarButtonItem = UIBarButtonItem(title: "取消", style: UIBarButtonItemStyle.Plain, target: self, action: "close")
        
        // title
        navigationItem.title = "登录"
        
        // 使用WebView加载登录界面
        let urlString = oauthURLString + "?client_id=" + client_id + "&redirect_uri=" + redirect_uri
        let url = NSURL(string: urlString)
        let request = NSURLRequest(URL: url!)
        webView.loadRequest(request)
//        CZPrint(items: "urlString: \(urlString)")
        
        // 加指示器,显示正在加载
// SVProgressHUD.showErrorWithStatus(status: String!) 显示错误
//        SVProgressHUD.showInfoWithStatus("正在加载") // 提示信息感叹号,会自动关闭
        SVProgressHUD.showWithStatus("正在加载")  // 进度形式,如果不主动关闭,会一直存在
    }

    // MARK: - 点击事件
    //自动填充
    @objc private func autoFill() {
//        CZPrint(items: "")
        let jsString = "document.getElementById('userId').value='12411368@qq.com';document.getElementById('passwd').value='ge1234';"
        // 使用WebView执行JS代码
        webView.stringByEvaluatingJavaScriptFromString(jsString)
    }
    
    //取消
    @objc private func close() {
        //取消的时候也要把指示器关掉
        SVProgressHUD.dismiss()
        dismissViewControllerAnimated(true, completion: nil)
    }

    // MARK: - 懒加载
    /// webView
    private lazy var webView: UIWebView = UIWebView()
}

extension CZOauthViewController: UIWebViewDelegate {
    func webViewDidFinishLoad(webView: UIWebView) {
        /// webView加载完成调用
        SVProgressHUD.dismiss()
    }
    
    // webView加载网页的时候回调用这个方法,加载一次回调一次,询问我们是否要加载某个请求
    // return true可以加载这个界面
    // teturn false就不加载
    func webView(webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType: UIWebViewNavigationType) -> Bool {
        
        let url = request.URL!
        
        CZPrint(items: "request: \(url.absoluteString)")
        // 点击授权: http://www.baidu.com/?code=46f61a46f57a8929fa4bb0c1a27a6e84
        // 点击取消: http://www.baidu.com/?error_uri=%2Foauth2%2Fauthorize&error=access_denied&error_description=user%20denied%20your%20request.&error_code=21330
        
        if !url.absoluteString.hasPrefix(redirect_uri) {
            // 只要不是授权回调地址,是新浪的界面,就让他去加载
            return true
        }else{
            // 是授权回调地址,点击的是取消或授权,不让他去加载,我们自己来做一些事情
//            CZPrint(items: "点击了授权或者取消")
            // URL的query: ?后面的东西
            let query = url.query!
            CZPrint(items: "quern: \(query)")
            let codeString = "code="
            if query.hasPrefix(codeString){
                // 如果query 是以 code=开头表示点击的授权按钮
                // 从query中截取code的值,substringFromIndex从指定位置截取到最后
                let code = (query as NSString).substringFromIndex(codeString.characters.count)
                CZPrint(items: "code: \(code)")
//                CZPrint(items: "点击了授权按钮")
                
                /// 加载AccessToken,字典转模型,模型保存到沙盒
                CZUserAccountViewModel.sharedInstance.loadAccessToken(code, callback: { (error) -> () in
                    
                    if error != nil {
                        //出现了错误
                        CZPrint(items: "出现了错误: \(error)")
                        SVProgressHUD.showErrorWithStatus("您的网络不给力")
                        
                        // 延迟一秒关闭
                        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (Int64)(1 * NSEC_PER_SEC)), dispatch_get_main_queue(), { () -> Void in
                            self.close()
                        })
                    }else {
                        //登录成功，没有错误
//                        CZPrint(items: "没有错误")
                        self.close()
                        
                        // 跳转到CZWelcomeViewCotroller
                        // 调用AppDelegate的switchRootViewContriller
                        let appDelegate = (UIApplication.sharedApplication().delegate as! AppDelegate)
                        //直接调用AppDelegate提供的方法，在AppDelegate打断点，每次跳转都会调用，这样方便查错
                        appDelegate.switchRootController(CZWelcomeViewController())
                        //这种方法不好，如果跳转逻辑出错，要在每个控制器的这个方法打断点，没有上一种方法方便
//                        appDelegate.window?.rootViewController = CZWelcomeViewController()
                    }
                })
                
            }else{
//                CZPrint(items: "点击了取消按钮")
                // query不是以code=开头,点击的是取消按钮
                close()
            }
        }
        return false
    }
}










